#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,l,v,rs1=0,rs2=0;
int a[100006][3],b[100006];
vector <int> c[1000009];
set <int> s1,s2;
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int t;
    cin>>t;
    while(t--)
    {

        rs1=0;
        cin>>n>>m>>l>>v;
        for(int i=1;i<=m;i++)
        {

            c[i].clear();
        }
        for(int i=1;i<=n;i++)
        {
            cin>>a[i][0]>>a[i][1]>>a[i][2];
        }

        for(int i=1;i<=m;i++)
        {

            cin>>b[i];

        }
        for(int i=1;i<=n;i++)
        {
            int f=0;
            if(a[i][2]==0)
            {
                if(a[i][1]>v)
                {
                    for(int j=1;j<=m;j++)
                    {
                        if(b[j]>=a[i][0])
                        {
                            f=1;
                            c[j].push_back(i);
                        }
                    }
                }

            }
            else
            {
                if(a[i][1]<=v&&a[i][2]<=0)
                {
                    continue;
                }
                else if(a[i][1]>=v&&a[i][2]>=0)
                {
                    for(int j=1;j<=m;j++)
                    {
                        if(b[j]>=a[i][0])
                        {
                            f=1;

                            c[j].push_back(i);
                        }
                    }
                }
                else if(a[i][1]<v&&a[i][2]>0)
                {
                    double t=(v*v-a[i][1]*a[i][1])/(2*a[i][2]);
                    for(int j=1;j<=m;j++)
                    {
                        if(b[j]>a[i][0]+t)
                        {
                            f=1;
                            c[j].push_back(i);

                        }
                    }
                }
                else
                {
                    double t=(v*v-a[i][1]*a[i][1])/(2*a[i][2]);
                    for(int j=1;j<=m;j++)
                    {
                        if(b[j]<a[i][0]+t&&b[j]>=a[i][0])
                        {
                            f=1;
                            c[j].push_back(i);
                        }
                    }
                }
            }
            if(f)rs1++;

        }
        int rs2=0;
        sort(c+1,c+m+1);
        cout<<rs1<<' ';
        int mm=0;
        s1.clear();
        s2.clear();
        int k;
        while(s2.size()<rs1)
        {
            rs2++;
            int p;
            mm=0;
            for(int j=1;j<=m;j++)
            {

                for(k=0;k<c[j].size();k++)
                {
                    s1.insert(c[j][k]);
                }
                if(s1.size()>mm)
                {
                    p=j;
                    mm=s1.size();
                }

                s1=s2;
            }
            for(k=0;k<c[p].size();k++)
            {
                s2.insert(c[p][k]);
            }
        }
        cout<<m-rs2<<endl;

    }


    return 0;
}
